<template>
  <view class="page">
    <!-- 表单组件 -->
    <mes-form :mesForm="mesFormTop" ref="formTopRef"></mes-form>
    <!-- 扫码添加 -->
    <mes-choose-goods :top="top" type="requisition"></mes-choose-goods>
    <!-- 当手动添加商品时 -->
    <mes-goods
      :form="mesGoodsForm"
      @delete="delGoods"
      @edit="editGoods"
    ></mes-goods>
    <!-- 备注 -->
    <mes-form :mesForm="remark"></mes-form>
    <!-- 重置 -->
    <mes-button :type="3" :form="buttonFrom"></mes-button>
  </view>
</template>

<script>
export default {
  data() {
    return {
      clerkHasMore: true,
      clerkForm: {
        page: 1,
        limit: 8,
        status: 1
      },
      goodsList: [], //商品列表
      mesGoodsForm: {
        numberUnitField: 'unit_name', //数量单位
        priceField: 'purchase' //单价
      },
      remark: {
        top: 20,
        row: {
          remark: ''
        },
        items: [
          {
            title: '备注',
            slots: {
              field: 'remark',
              type: 'input'
            }
          }
        ]
      },
      top: 20, //扫码添加
      mesFormTop: {
        top: 20,
        row: {
          purchase_time: this.$tools.getCurTime(1)
        },
        items: [
          {
            title: '生产单',
            required: true,
            slots: {
              field: 'production_code',
              // type: 'select',
              icon: 'arrow'
            },
            tap: () => {
              uni.navigateTo({ url: '/pages/home/requisition/choice' })
            },
            rules: [
              {
                // 是否必要
                type: 'required',
                // 校验提示语
                message: '请选择生产单编号'
              }
            ]
          },
          {
            title: '单据编号',
            required: true,
            slots: {
              field: 'purchase_code',
              type: 'input'
            },
            rules: [
              {
                // 是否必要
                type: 'required',
                // 校验提示语
                message: '请输入单据编号'
              }
            ]
          },
          {
            title: '单据日期',
            required: true,
            slots: {
              field: 'purchase_time',
              type: 'date'
            },
            rules: [
              {
                // 是否必要
                type: 'required',
                // 校验提示语
                message: '请选择单据时间'
              }
            ]
          },
          {
            title: '领料人',
            slots: {
              field: 'work_name',
              type: 'select',
              icon: 'arrow',
              showSelect: () => {
                this.resetPaging()
                this.getClerk()
              },
              select: {
                search: true,
                placeholder: '请输入关键词',
                options: [],
                searchEvent: (keyword) => {
                  this.getClerk(keyword)
                  this.resetPaging()
                },
                scrolltoupper: () => {
                  if (this.clerkForm.page > 0) {
                    this.clerkForm.page--
                  }
                  this.getClerk()
                },
                scrolltolower: () => {
                  if (!this.clerkHasMore) return
                  this.clerkForm.page++
                  this.getClerk()
                },
                changeEvent: (item) => {
                  this.mesFormTop.row.work_id = item.id
                  this.mesFormTop.row.work_name = item.name
                }
              }
            }
          }
        ]
      },
      buttonFrom: {
        leftEvent: () => {
          this.clearData()
        },
        leftText: '重置',
        rightEvent: () => {
          this.saveData()
        },
        rightText: '确定'
      }
    }
  },
  methods: {
    resetPaging() {
      this.clerkHasMore = true
      this.clerkForm.page = 1
      this.mesFormTop.items[3].slots.select.options = []
    },
    //获取商品
    getGoods() {
      if (this.mesFormTop.row.production_code) {
        this.$api.prod.picking
          .proinfo({
            purchase_code: this.mesFormTop.row.production_code
          })
          .then((res) => {
            console.log(res.data, '通过编码号获取商品')
            let info_list = []
            if (res.code == 200) {
              res.data.forEach((item) => {
                info_list.push({
                  id: item.id,
                  goods_id: item.goods_id, //商品id
                  unit: item.unit,
                  // 编辑商品用到的（提交参数）
                  // 商品编号（商品详情获取或者通用->商品价格接口获取）
                  goods_code: item.goods_code,
                  //  商品规格型号
                  goods_note: item.goods_note,
                  goods_attr: item.goods_attr || null, // 商品属性ID(验证需要加)
                  attr_name:item.attr_name|| null,
                  auxiliary_data: item.auxiliary_data, //属性数组
                  auxiliary: item.goods_info.auxiliary, //属性状态
                  //  商品单位ID（资料->商品获取商品单位列表，用户选择）
                  goods_unit: item.unit_id,
                  stores_id: item.stores_id, //仓库ID
                  allow_stock: item.allow_stock || '', // 可用库存
                  //  数量（默认为1，用户修改）
                  number: item.number,
                  //  基本单位ID（商品详情获取或者通用->商品价格接口获取）
                  default_unit: item.default_unit,
                  //  基本数量（默认为1，多单位时需要换算，或者通过通用->价格变动接口格式化）
                  basic_nmber: item.basic_nmber,
                  unit_price: item.purchase, //商品单价
                  all_money: item.money, //购货金额
                  remark: item.remark, //备注
                  batch_id: item.batch_id || '', //批次ID
                  batch_name: item.batch_name, //批次名称
                  manufacture:item.manufacture? item.manufacture*1000:'', // 生产日期
                  guarantee:item.guarantee? item.guarantee*1000:'', //保质期
                  validity: item.validity || '', //有效期至
                  serial: item.serial || null, //序列号数组
                  serial_status: item.goods_info.serial,
                  batch: item.goods_info.batch, //是否开启批次
                  //  商品单价（通用->商品价格获取）
                  purchase: item.purchase,
                  // 编辑商品用到的（展示参数）
                  default_unit_name: item.default_unit_name, //基本单位名称
                  // mes-goods显示中用到的
                  unit_name: item.unit_name, //数量单位
                  goods_image: item.goods_image, //图片
                  goods_name: item.goods_name, //商品名称
                  period_period: item.serial //序列号数组
                })
              })

              getApp().globalData.goods.list = info_list
            }
          })
      }
    },
    //获取单据编号
    async getCode(newCode) {
      let code = await this.$tools.getCode(newCode) //可用编号
      this.mesFormTop.row.purchase_code = code
    },
    //获取职员
    getClerk(keyword) {
      this.clerkForm.keyword = keyword
      this.$api.source.staff_member.index(this.clerkForm).then((res) => {
        if (res.code == 200) {
          this.clerkHasMore = res.data.list.length ? true : false
          this.mesFormTop.items.forEach((item) => {
            if (item.title === '领料人') {
              item.slots.select.options = [
                ...item.slots.select.options,
                ...res.data.list
              ]
            }
          })
        }
      })
    },
    //删除商品
    delGoods(i) {
      getApp().globalData.goods.list.splice(i, 1)
    },
    //编辑商品
    editGoods(i) {
      let obj = {
        name: 'add',
        index: i
      }
      obj = JSON.stringify(obj)
      uni.navigateTo({ url: `/pages/home/requisition/goods?obj=${obj}` })
    },
    //重置
    clearData() {
      this.mesFormTop.row = {
        production_code: '',
        purchase_code: '',
        purchase_time: '',
        work_id: '',
        info_list: [], //商品详细数据
        code_type: 1 //单据类型（1：加工单，2：委外加工单）
      }
      this.remark.row = {
        remark: ''
      }
      this.getCode(33) //获取单据编号
      getApp().globalData.goods.list = []
      this.mesFormTop.row.purchase_time = this.$tools.getCurTime(1)
    },
    //更新数据
    saveData() {
      this.$refs.formTopRef.validate((valid) => {
        let postForm = {
          code_type: 1,
          production_code: this.mesFormTop.row.production_code, //生产计划编号
          purchase_code: this.mesFormTop.row.purchase_code, //单据编号
          purchase_time: this.mesFormTop.row.purchase_time, //单据时间
          work_id: this.mesFormTop.row.work_id || '', //领料人
          remark: this.remark.row.remark || '',
          info_list: []
        }

        let info_list = getApp().globalData.goods.list

        info_list.forEach((item) => {
          item.manufacture = item.manufacture? this.$tools.timeRub(item.manufacture):''
          item.validity = item.validity ?this.$tools.timeRub(item.validity):''
          postForm.info_list.push({
            // 编辑商品用到的（提交参数）
            // 商品编号（商品详情获取或者通用->商品价格接口获取）
            goods_code: item.goods_code,
            //  商品规格型号
            goods_note: item.goods_note === null,
            //  商品单位ID（资料->商品获取商品单位列表，用户选择）
            goods_attr: item.goods_attr || null, // 商品属性ID
            attr_name:item.attr_name|| null,
            auxiliary_data: item.auxiliary_data, //属性数组
            auxiliary: item.auxiliary, //属性状态
            goods_unit: item.goods_unit,
            stores_id: item.stores_id, //仓库ID
            allow_stock: item.allow_stock || null, // 可用库存
            //  数量（默认为1，用户修改）
            number: item.number,
            //  基本单位ID（商品详情获取或者通用->商品价格接口获取）
            default_unit: item.default_unit,
            //  基本数量（默认为1，多单位时需要换算，或者通过通用->价格变动接口格式化）
            basic_nmber: item.basic_nmber,
            unit_price: item.unit_price, //商品单价
            all_money: item.all_money, //购货金额
            remark: item.remark, //备注
            batch_id: item.batch_id || '', //批次ID
            batch_name: item.batch_name, //批次名称
            manufacture: item.manufacture, // 生产日期
            guarantee: item.guarantee, //保质期
            validity: item.validity || '', //有效期至
            serial: item.serial || null, //序列号数组
            serial_status: item.serial_status,
            batch: item.batch, //是否开启批次
            // 编辑商品用到的（展示参数）
            default_unit_name: item.default_unit_name, //基本单位名称
            // mes-goods显示中用到的
            unit_name: item.unit_name, //数量单位
            goods_image: item.goods_image, //图片
            goods_name: item.goods_name, //商品名称
            period_period: item.serial_status == 1 ? item.serial : ''
          })
        })
        postForm.info_list = JSON.stringify(postForm.info_list)
        if (valid) {
          if (!info_list.length) {
            return this.$tools.toast('请添加商品')
          }
          this.$api.prod.picking.add(postForm).then((res) => {
            if (res.code == 200) {
              this.$tools.successBack(res.msg)
            }
          })
        }
      })
    }
  },
  onLoad() {
    this.getClerk() //获取职工列表
    this.getCode(33) //获取单据编号
  }
}
</script>

<style lang="less" scoped>
</style>
